/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.web.managedbeans;

import cl.bussines.ejbs.AreaTrabajoFacade;
import cl.bussines.ejbs.CargosFacade;
import cl.bussines.ejbs.ComunasFacade;
import cl.bussines.ejbs.EmpleadosFacade;
import cl.bussines.ejbs.RolFacade;
import cl.bussines.ejbs.SucursalesFacade;
import cl.bussines.entities.AreaTrabajo;
import cl.bussines.entities.Cargos;
import cl.bussines.entities.Comunas;
import cl.bussines.entities.Empleados;
import cl.bussines.entities.Rol;
import cl.bussines.entities.Sucursales;
import cl.web.jsf.util.Rut;
import cl.web.jsf.util.ValidateResult;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.apache.log4j.Logger;

/**
 *
 * @author Vogel
 */
@ManagedBean(name="empleadoMBean")
@SessionScoped
public class EmpleadoMBean extends BaseMBean{

    private static final String VISTA_LISTAR = "empleados";
    private static final String VISTA_CREAR = "empleadosCrear";
    private static final String VISTA_EDITAR = "empleadosEditar";
    
    private List<Empleados> empleados;
    @EJB
    private cl.bussines.ejbs.EmpleadosFacade ejbFacade;
    @EJB
    private ComunasFacade comunasEjb;
    @EJB
    private CargosFacade cargosEjb;
    @EJB
    private RolFacade rolEjb;
    @EJB
    private AreaTrabajoFacade areasEjb;
    @EJB
    private SucursalesFacade sucursalesEjb;
    private static Logger LOG = Logger.getLogger(EmpleadoMBean.class);
    private Empleados empleado = new Empleados();  
    private List<Comunas> comunas;
    private List<Sucursales> sucursales;
    private List<Cargos> cargos;
    private List<Rol> roles;
    private List<AreaTrabajo> areas;
    private int codComuna;
    private int codSucursal;
    private int codCargo;
    private int codRol;
    private int codArea;
    private String msgRut="";
    private String clave="";
    
    
    public String init(){
        return VISTA_LISTAR;
    }
    
    public String delete(){
        try{
            int codigo = Integer.parseInt(getParam("codigo"));
            String index = getParam("index");

            LOG.info("Codigo del empleado a editar ["+codigo+"]");
            LOG.info("Index de la tabla ["+index+"]");
            LOG.info("clientes size ["+empleados.size()+"]");
            for(Empleados emp : empleados){ 
                if(emp.getIdEmpleados()==codigo){
                    LOG.info("Entro a setear el empleado;");
                    this.empleado = emp;
                }
            }
            if(empleado != null && empleado.getIdEmpleados()!=0){
                LOG.info("START::DELETE::");
                ejbFacade.remove(empleado);
                message(FacesMessage.SEVERITY_INFO,"Ha eliminado correctamente.");
            }
            
            empleados.clear();
        } catch (Exception e) {
            LOG.error(e);
            message(FacesMessage.SEVERITY_ERROR,"Error al eliminar Empleado.");
        }
        return VISTA_LISTAR;
    }
    
    public String volver(){
        empleados.clear();
        return init();
    }
    
    public String irCrear(){
        empleado = new Empleados();
        return VISTA_CREAR;
    }
    
    public String irEditar(){
        int codigo = Integer.parseInt(getParam("codigo"));
        String index = getParam("index");
        
        LOG.info("Codigo del empleado a editar ["+codigo+"]");
        LOG.info("Index de la tabla ["+index+"]");
        LOG.info("clientes size ["+empleados.size()+"]");
        for(Empleados emp : empleados){ 
            if(emp.getIdEmpleados()==codigo){
                LOG.info("Entro a setear el empleado;");
                this.empleado = emp;
            }
        }
        //Se cargan los codigos de los combos
        codComuna = empleado.getCUTComuna().getCUTComuna();
        codSucursal = empleado.getIdSucursales().getIdSucursales();
        codCargo = empleado.getIdCargo().getIdCargo();
        codRol = empleado.getIdRol().getIdRol();
        codArea = empleado.getIdAreaTrabajo().getIdAreaTrabajo();
    
        LOG.info(empleado);
        return VISTA_EDITAR;
    }
    
    public String crear(){
      this.msgRut = "";
      boolean valido = true;
        try {
            //CAMPOS OBLIGATORIOS
            LOG.info("RUT :"+empleado.getRutEmpleado()+" dv :"+empleado.getDvEmpleado());
            ValidateResult valResult = Rut.validateRUT(empleado.getRutEmpleado()+"-"+empleado.getDvEmpleado());
            if (valResult.getErrorResult() == null || "".equals(valResult.getErrorResult())){
                    this.msgRut = "";
            }else{
                this.msgRut = "El rut ingresado no es válido";
                valido = false;
            }
            cargarObjCombos();
            //SE CREA CLIENTE
            if(valido){
              LOG.info("START::CREATE::");
              ejbFacade.create(empleado);
              message(FacesMessage.SEVERITY_INFO,"Ha sido creado correctamente.");
            }
        } catch (Exception e) {
            LOG.error(e);
            message(FacesMessage.SEVERITY_ERROR,"Error al crear nuevo empleado.");
        }
        return VISTA_CREAR;
    }
    
    public void cargarObjCombos(){
        for(Comunas comu : comunas){
            if(codComuna == (int)comu.getCUTComuna()){
                LOG.info("ENTRO A SETEAR COMUNA "+codComuna);
                empleado.setCUTComuna(comu);
            }
        }
        for(Sucursales sucu : sucursales){
            if(codSucursal == (int)sucu.getIdSucursales()){
                LOG.info("ENTRO A SETEAR SUCURSAL "+codSucursal);
                empleado.setIdSucursales(sucu);
            }
        }
        for(Cargos car : cargos){
            if(codCargo == (int)car.getIdCargo()){
                LOG.info("ENTRO A SETEAR CARGO "+codCargo);
                empleado.setIdCargo(car);
            }
        }
        for(Rol rol : roles){
            if(codRol == (int)rol.getIdRol()){
                LOG.info("ENTRO A SETEAR ROL "+codRol);
                empleado.setIdRol(rol);
            }
        }
        for(AreaTrabajo area : areas){
            if(codArea == (int)area.getIdAreaTrabajo()){
                LOG.info("ENTRO A SETEAR AREA "+codArea);
                empleado.setIdAreaTrabajo(area);
            }
        }
    }
    
    public String editar(){
        this.msgRut = "";
        try {
            //CAMPOS OBLIGATORIOS
            cargarObjCombos();
            if(!"".equalsIgnoreCase(clave.trim())){
                empleado.setPassword(clave);
            }
            //SE CREA USUARIO
            LOG.info("START::EDITAR::");
            ejbFacade.edit(empleado);
            message(FacesMessage.SEVERITY_INFO,"Empleado editado correctamente.");
        } catch (Exception e) {
            LOG.error(e);
            message(FacesMessage.SEVERITY_ERROR,"Error al editar nuevo empleado.");
        }
        return VISTA_EDITAR;
    }
    
   
    
    public List<Empleados> getEmpleados() {
         if(empleados == null || empleados.isEmpty()){
            empleados = getEjbFacade().findAll();
        }
        return empleados;
    }

    public void setEmpleados(List<Empleados> empleados) {
        this.empleados = empleados;
    }

    public EmpleadosFacade getEjbFacade() {
        return ejbFacade;
    }

    public void setEjbFacade(EmpleadosFacade ejbFacade) {
        this.ejbFacade = ejbFacade;
    }

    public ComunasFacade getComunasEjb() {
        return comunasEjb;
    }

    public void setComunasEjb(ComunasFacade comunasEjb) {
        this.comunasEjb = comunasEjb;
    }

    public Empleados getEmpleado() {
        return empleado;
    }

    public void setEmpleado(Empleados empleado) {
        this.empleado = empleado;
    }

    public List<Comunas> getComunas() {
         if(comunas == null || comunas.isEmpty()){
            comunas = getComunasEjb().findAll();
        }
        return comunas;
    }

    public void setComunas(List<Comunas> comunas) {
        this.comunas = comunas;
    }

    public int getCodComuna() {
        return codComuna;
    }

    public void setCodComuna(int codComuna) {
        this.codComuna = codComuna;
    }

    public int getCodSucursal() {
        return codSucursal;
    }

    public void setCodSucursal(int codSucursal) {
        this.codSucursal = codSucursal;
    }

    public int getCodCargo() {
        return codCargo;
    }

    public void setCodCargo(int codCargo) {
        this.codCargo = codCargo;
    }

    public int getCodRol() {
        return codRol;
    }

    public void setCodRol(int codRol) {
        this.codRol = codRol;
    }

    public String getMsgRut() {
        return msgRut;
    }

    public void setMsgRut(String msgRut) {
        this.msgRut = msgRut;
    }

    public CargosFacade getCargosEjb() {
        return cargosEjb;
    }

    public void setCargosEjb(CargosFacade cargosEjb) {
        this.cargosEjb = cargosEjb;
    }

    public RolFacade getRolEjb() {
        return rolEjb;
    }

    public void setRolEjb(RolFacade rolEjb) {
        this.rolEjb = rolEjb;
    }

    public AreaTrabajoFacade getAreasEjb() {
        return areasEjb;
    }

    public void setAreasEjb(AreaTrabajoFacade areasEjb) {
        this.areasEjb = areasEjb;
    }

    public List<Sucursales> getSucursales() {
        if(sucursales == null || sucursales.isEmpty()){
            sucursales = sucursalesEjb.findAll();
        }
        return sucursales;
    }

    public void setSucursales(List<Sucursales> sucursales) {
        this.sucursales = sucursales;
    }

    public List<Cargos> getCargos() {
        if(cargos == null || cargos.isEmpty()){
            cargos = cargosEjb.findAll();
        }
        return cargos;
    }

    public void setCargos(List<Cargos> cargos) {
        this.cargos = cargos;
    }

    public List<Rol> getRoles() {
        if(roles == null || roles.isEmpty()){
            roles = rolEjb.findAll();
        }
         return roles;
    }

    public void setRoles(List<Rol> roles) {
        this.roles = roles;
    }

    public SucursalesFacade getSucursalesEjb() {
        return sucursalesEjb;
    }

    public void setSucursalesEjb(SucursalesFacade sucursalesEjb) {
        this.sucursalesEjb = sucursalesEjb;
    }

    public List<AreaTrabajo> getAreas() {
        if(areas == null || areas.isEmpty()){
            areas = areasEjb.findAll();
        }
        return areas;
    }

    public void setAreas(List<AreaTrabajo> areas) {
        this.areas = areas;
    }

    public int getCodArea() {
        return codArea;
    }

    public void setCodArea(int codArea) {
        this.codArea = codArea;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }

   
}
